A data-center fabric like Application Centric Infrastructure (ACI) could contain up to 400 leaf switches, each potentially running about 50 applications (e.g., linux processes, bgp processes, ospf processes), taking the total to about 20K linux processes. Like most embedded technology, ACI is built using C and C++, both of which are prone to memory leaks due to programming errors. Memory leaks can occur since there is no native garbage collection facility.
Applications leaking even a small amount of memory, such as 1 Kb per day each, can result in 20 MB of wasted memory per day. Such memory degradation is harmful in the long run and could cause serious side effects that include increased response time and non-recoverable process crashes. Moreover, running analytics on the entire fabric memory is close to impossible due to the sheer scale and volume of memory that needs to be analyzed.
Native in-memory garbage collection is getting popular, but is not even close to implementation for C and C++ especially in real-time fabric environments which are sensitive to time delays. Though C++ does have explicit garbage collection facilities like smart pointers, there has been no progress on providing an implicit garbage collector. One of the main reasons for this could be the fear of performance impact. For example, “mark and sweep” garbage collection freezes everything in the process while it is at work. Even milliseconds of paused processing can impact real-time embedded systems.
In essence, for the millions of embedded systems that use C/C++, proper garbage collection is not yet a reality and the only solution at the moment is to kill and restart the offending process.